package com.xunqi.activemq.queue;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.junit.Test;

import javax.jms.*;

/**
 * @Description: 生产者
 * @Created: with IntelliJ IDEA.
 * @author: 夏沫止水
 * @createTime: 2020-06-21 23:10
 **/

public class JmsProduct {

    //使用nio协议
    // private static final String ACTIVEMQ_URL = "tcp://192.168.77.130:61608";
    //默认tcp协议
    public static final String ACTIVEMQ_URL = "tcp://192.168.77.130:61616";
    //使用内置broker
    // public static final String ACTIVEMQ_URL = "tcp://localhost:61616";
    public static final String QUEUE_NAME = "queue-01";

    @Test
    public void product() throws JMSException {

        //1.创建连接工厂，按照给定的URL，采用默认的用户名密码
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);

        //2.通过连接工厂,获得connection并启动访问
        Connection connection = activeMQConnectionFactory.createConnection();
        connection.start();

        //3.创建会话session
        //两个参数transacted=事务,acknowledgeMode=确认模式(签收)
        Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);

        //4.创建目的地(具体是队列queue还是主题topic)
        Queue queue = session.createQueue(QUEUE_NAME);

        //5.创建消息的生产者
        MessageProducer messageProducer = session.createProducer(queue);
        messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);
        messageProducer.setTimeToLive(0L);
        messageProducer.setPriority(9);

        //6.通过使用消息生产者,生产三条消息,发送到MQ的队列里面
        for (int i = 1; i <= 3; i++) {
            //7.创建消息
            TextMessage textMessage = session.createTextMessage("queue---" + i);//理解为一个字符串
            // textMessage.setStringProperty("c01","vip");
            //设置持久性
/*            textMessage.setJMSDeliveryMode(DeliveryMode.PERSISTENT);
            //设置过期时间    如果timeToLive值等于0，则JMSExpiration被设为0，表示该消息永不过期。
            textMessage.setJMSExpiration(0L);
            //设置消息优先级  从0-9十个级别，0-4是普通消息5-9是加急消息。
            textMessage.setJMSPriority(9);
            //唯一标识每个消息的标识由MQ产生。
            textMessage.setJMSMessageID("111111111111111111111111");*/

            //8.通过messageProducer发送给MQ队列
            messageProducer.send(textMessage);
            // messageProducer.send(textMessage,DeliveryMode.PERSISTENT,9,0L);

            // MapMessage mapMessage = session.createMapMessage();
            // mapMessage.setString("k1","v1");
            // messageProducer.send(mapMessage);
        }


        //9.关闭资源
        messageProducer.close();
        //提交事务
        session.commit();
        session.close();
        connection.close();
        System.out.println("****消息发布到MQ队列完成");

    }

}
